# -*- coding: utf-8 -*-
"""
@Time    : 2021/6/9 15:50
@Author  : jins
@File    : 内置函数.py
"""

# abs() 返回一个数的绝对值。
a = -1.5
print(abs(a))  # 1.5

# all(iterable) 如果 iterable 的所有元素均为真值（或可迭代对象为空）则返回 True 。
tmp = [1, 2, 3, '', 'a']
print(all(tmp))  # False
tmp = [1, 2, 3, True]
print(all(tmp))  # True

# any(iterable) 如果 iterable 的任一元素为真值则返回 True。
tmp = ['', None, False]
print(any(tmp))  # False
tmp = [None, '', 2]
print(any(tmp))  # True

# bin(x) 将一个整数转变为一个前缀为“0b”的二进制字符串。
a = 99
print(bin(a))

# callable(object) 如果参数 object 是可调用的就返回 True，否则返回 False。

# chr(i) 返回 Unicode 码位为整数 i 的字符的字符串格式。例如，chr(97) 返回字符串 'a'，chr(8364) 返回字符串 '€'。这是 ord() 的逆函数。
print(chr(88))  # X
print(chr(223))  # ß

# @classmethod 把一个方法封装成类方法。一个类方法把类自己作为第一个实参，就像一个实例方法把实例自己作为第一个实参。
# 类方法的调用可以在类上进行 (例如 C.f()) 也可以在实例上进行 (例如 C().f())。

# dir([object]) 如果没有实参，则返回当前本地作用域中的名称列表。如果有实参，它会尝试返回该对象的有效属性列表。
s = [2, 3, 4]
print(dir(s))

# enumerate(iterable, start=0) 返回一个枚举对象。iterable 必须是一个序列，或 iterator，或其他支持迭代的对象。
tmp = ['jack', 'lucy', 'rose']
print(list(enumerate(tmp)))

# eval(expression[, globals[, locals]]) 就是把引号剥掉一层，然后当做是个表达式或者命令
a = 10
b = 20
c = 30
s = '[a,b,c]'
# print(eval('s'))
res = eval('s')
print(res)
print(type(res))

# exec(object[, globals[, locals]]) 这个函数支持动态执行 Python 代码。 object 必须是字符串或者代码对象。
# 如果是字符串，那么该字符串将被解析为一系列 Python 语句并执行（除非发生语法错误）。 1 如果是代码对象，它将被直接执行。
tmp = "print('123')"
exec(tmp)

# class float([x]) 返回从数字或字符串 x 生成的浮点数。
print(float('123'))  # 123.0

# format(value[, format_spec]) 将 value 转换为 format_spec 控制的“格式化”表示。

# getattr(object, name[, default]) 返回对象命名属性的值。name 必须是字符串。如果该字符串是对象的属性之一，则返回该属性的值。
print(getattr(str, 'upper'))

# hasattr(object, name) 该实参是一个对象和一个字符串。如果字符串是对象的属性之一的名称，则返回 True，否则返回 False。

# isinstance(object, classinfo) 如果参数 object 是参数 classinfo 的实例或者是其 (直接、间接或 虚拟) 子类则返回 True。
# 如果 object 不是给定类型的对象，函数将总是返回 False。
print(isinstance('22', int))  # False

# issubclass(class, classinfo) 如果 class 是 classinfo 的 (直接、间接或 虚拟) 子类则返回 True。 类会被视作其自身的子类。

# len(s) 返回对象的长度（元素个数）。实参可以是序列（如 string、bytes、tuple、list 或 range 等）
# 或集合（如 dictionary、set 或 frozen set 等）。

# class list([iterable]) 然被称为函数，list 实际上是一种可变序列类型

# 
